package com.ddzh.web;

import com.ddzh.dto.CheckGroupDto;
import com.ddzh.entity.PageReq;
import com.ddzh.entity.PageRes;
import com.ddzh.entity.Result;
import com.ddzh.pojo.CheckGroup;
import com.ddzh.service.CheckGroupService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/checkgroup")
public class CheckGroupController {

    @Reference
    private CheckGroupService checkGroupService;

//    @PostMapping("/save")
//    public Result save(@RequestBody CheckGroup checkItemGroup){
//        return new Result(checkGroupService.saveOrUpdate(checkItemGroup));
//    }
//    默认的接口不能满足需求了=》扩充接口

    @PostMapping("/save")
    public Result save(@RequestBody CheckGroupDto checkItemGroupDto) {
        System.out.println("checkItemGroupDto.toString() = " + checkItemGroupDto.toString());
        return new Result(checkGroupService.saveOrUpdateDto(checkItemGroupDto));
    }

        @GetMapping("/findAll")
    public Result findAll(){
        return new Result(checkGroupService.list());
    }


    @GetMapping("/delete")
    public Result delete(Long id) {
        return new Result(checkGroupService.deleteById(id));
    }

    /**
     * 分页查询
     */
    @PostMapping("/findByPage")
    public Result findByPage(@RequestBody PageReq pageReq) {
        return new Result(checkGroupService.findByPage(pageReq));
    }



    /*
    查询组的时候需要将其包含的项选出来：
    检查项，检查组之间是多对多
    每一个检查项中包含一个检查组集合/数组（与前端保持一致），
    如何查对应的项：一个组id - 中间表 - 多个项id - 项信息已经有了 - 项id就可以勾选每一项了
    select id
    from item_group_t g inner join check_group_item_t gi
    on g.id=gi.group_id
    返回给前端=》前端有数组接收了
    不改原实体类，新加一个实体类表示组对象和项id数组
    vo：view object ，controller到前端==》后台数据不够用的情况下，自己扩展加的实体，这里不适合
    现在是页面有多余数据，希望传过去
    dto：data transform object==》页面

     */
    /*
    注意事项：
    1. 实际开发中也要先保证controller层提供给前端的接口能调用，内部逻辑细节可以事后再补
    2. 同一个项目中的对象之间相互引用不属于网络之间数据交互，不需要用@Reference注解引用
    3. 为什么这里用的Service实例操作数据库，而不是用mapper中实例？体现的是分层的思想，不然要分层干嘛
    4. vo和dto使用区别：
        vo：view object ，controller到前端==》后台数据不够用的情况下，自己扩展加的实体，这里不适合
        现在是页面有多余数据，希望传过去
        dto：data transform object==》页面
     5. 对象作为参数请求时，要求前端的对象属性要和后台实体类中对应属性名一致，不然拿到的就是null
     6. @Reference //这里夸项目访问=》夸IoC容器访问=》夸服务器后台访问数据
        private CheckGroupItemService checkGroupItemService;
     7. 多条数据批量处理
   * */


    //TODO 异常处理
    //TODO 接口测试
    //TODO 多条件模糊查询
    /*
    增加数据往前放
    异常出错处理:后台异常统一处理实现类，前端：需要判断请求是否成功，成功接收数据，不成功给出错误提示（后台给出）==》给出架构的时候就应该给出
    统一结果集封装
    分页：跳页，指定每页显示数量
     */
}
